$def with (form, maps_key)
$var script:
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=$maps_key" type="text/javascript"></script>
    <script type="text/javascript">
    var map = null;
    var marker = null;
    var geocoder = null;
    function initialize() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        var point = new GLatLng(parseFloat(document.getElementById("lateral").value),
                                 parseFloat(document.getElementById("longitudinal").value));
        map.setCenter(point, 16);
        map.setUIToDefault();
        marker = new GMarker(point, {draggable: true});
        geocoder = new GClientGeocoder();
        GEvent.addListener(marker, "dragend", function() {
          $$("#lateral").val(marker.getLatLng().lat().toFixed(6));
          $$("#longitudinal").val(marker.getLatLng().lng().toFixed(6));
          $$("#lateral_msg").hide();
          $$("#longitudinal_msg").hide();
        });
        map.addOverlay(marker);
      }
    }
    function showAddress() {
      if (geocoder) {
        var address = document.getElementById("street").value + ", " + document.getElementById("zip").value + " " + document.getElementById("city").value;
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " wurde nicht gefunden, bitte manuell auf der Karte einstellen.");
              $$("#lateral").val("");
              $$("#longitudinal").val("");
              $$("#lateral_msg").show();
              $$("#longitudinal_msg").show();
            } else {
              marker.setPoint(point);
              map.setCenter(point, 16);
              $$("#lateral").val(point.lat().toFixed(6));
              $$("#longitudinal").val(point.lng().toFixed(6));
              $$("#lateral_msg").hide();
              $$("#longitudinal_msg").hide();
            }
          }
        );
      }
    }
    </script>
    <script src="../../static/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
      $$(function() {
        $$.each(["street", "zip", "city", "phone", "email"], function(i, val) {
          $$("#" + val).after('<span id="'+val+'_msg" class="msg">bitte vervollständigen</span>').keyup(function() {
            if (this.value) {$$("#"+this.id+"_msg").hide()} else {$$("#"+this.id+"_msg").show()};
          }).filter('[value!=""]').next().hide();
        });
        $$("#lateral").after('<span id="lateral_msg" class="msg">Straße, PLZ und Ort ausfüllen und</span>').filter('[value!=""]').next().hide();
        $$("#longitudinal").after('<span id="longitudinal_msg" class="msg">unten “Adresse neu suchen” klicken</span>').filter('[value!=""]').next().hide();
      });
    </script>
$var body_attrs = ' onload="initialize()" onunload="GUnload()"'
<h1>Mitgliederdaten aktualiseren</h1>
<p>Damit wir nicht die Übersicht verlieren, darfst Du Deinen Namen nicht selbst ändern. Melde Namensänderungen unter <img src="../static/email.png" width=260 height=13 style="position:relative;top:2px;left:1px;">.</p>
<p>Die <a href="privacy.html">Hinweise zum Datenschutz im Mitgliederbereich des Schwäbischen Oratorienchors</a> erläutern, was mit Deinen persönlichen Daten geschieht.</p>
<form action="data.html" method="POST">
$:form.render()
</form>
<form action="#" onsubmit="showAddress(); return false;">
<p><input type="submit" name="geocode" value="Adresse neu suchen"></p>
</form>
<p id="map_canvas" style="width: 700px; height: 500px"></p>
<p>zurück zu <a href="index.html">Deiner SOC Mitgliederseite</a>, ohne Änderungen vorzunehmen</p>
